package com.xhs.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @desc: 抽象登录模板
 * @projectName: tools-parent
 * @author: xhs
 * @date: 2022/12/4 23:01
 * @version: JDK 1.8
 */
@Slf4j
@Component
public abstract class AbstractLoginTemplate {


    /**
     * 登录成功的状态码
     */
    private static String LOGIN_CODE = "200";

    /**
     * 登录方法
     *
     * @return
     */
    public String login() {
        // 1.登录
        Map<String, String> login = myLogin();
        // 2.记录登录日志
        loginLog(login);
        // 3.发送登录通知
        String loginCode = login.get("loginCode");
        if (!LOGIN_CODE.equals(loginCode)) {
            // 登录失败
            return loginFile();
        }
        return loginNotice(login);
    }

    /**
     * 登录
     *
     * @return
     */
    protected abstract Map<String, String> myLogin();

    /**
     * 异步记录登录日志
     *
     * @param login
     */
    @Async
    protected void loginLog(Map<String, String> login) {
        log.info(">>>>>第二步 记录登录日志.....loginLog()");
    }

    /**
     * 3.发送登录通知
     *
     * @param login
     * @return
     */
    protected abstract String loginNotice(Map<String, String> login);

    /**
     * 登录失败
     *
     * @return
     */
    protected abstract String loginFile();

}
